package br.com.jk.config;

import br.com.jk.util.Util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 *
 * @author camilo
 */
public class CfgPropUtil implements CfgProp {

  @Override
  public Cfg getCfgProp() {
    try {
      Cfg cfg = new Cfg();
      Properties prop = new Properties();
      InputStream in = this.getClass().getResourceAsStream("cfg.properties");
      prop.load(in);

      switch (prop.getProperty("bd.base")) {
        case Cfg.BASE_POSTGRESQL:
          cfg.setBase(Cfg.BASE_POSTGRESQL);
          cfg.setDialect(Cfg.POSTGRESQL_DIALECT);
          cfg.setDriver(Cfg.POSTGRESQL_DRIVER);
          cfg.setUrl(Cfg.POSTGRESQL_URL);
          cfg.setIp(prop.getProperty("bd.ip"));
          cfg.setPorta(prop.getProperty("bd.porta"));
          cfg.setNomeBd(prop.getProperty("bd.nomebd"));
          cfg.setUser(prop.getProperty("bd.user"));
          cfg.setPassword(prop.getProperty("bd.password"));
          break;
        case Cfg.BASE_HSQLDB:
          cfg.setBase(Cfg.BASE_HSQLDB);
          cfg.setDialect(Cfg.HSQLDB_DIALECT);
          cfg.setDriver(Cfg.HSQLDB_DRIVER);
          cfg.setUrl(Cfg.HSQLDB_URL);
          cfg.setNomeBd(prop.getProperty("bd.nomebd"));
          cfg.setUser(prop.getProperty("bd.user"));
          cfg.setPassword(prop.getProperty("bd.password"));
          cfg.setLocal(prop.getProperty("bd.local"));
          break;
      }
      cfg.setXmlDiretorio(prop.getProperty("xml.diretorio"));
      cfg.setIpMixdb(prop.getProperty("bd.ip.mixdb"));

      return cfg;
    } catch (IOException e) {
      Util.msgErro(e, "Erro na leitura do arquivo de configurações.");
      return null;
    }
  }

  @Override
  public void setCfgProp(Cfg cfg) {
    Properties prop = new Properties();
//    definindo os valores para as keys do arquivo properties
    switch (cfg.getBase()) {
      case Cfg.BASE_POSTGRESQL:
        prop.setProperty("bd.base", cfg.getBase());
        prop.setProperty("bd.ip", cfg.getIp());
        prop.setProperty("bd.porta", cfg.getPorta());
        prop.setProperty("bd.nomebd", cfg.getNomeBd());
        prop.setProperty("bd.user", cfg.getUser());
        prop.setProperty("bd.password", cfg.getPassword());
        break;
      case Cfg.BASE_HSQLDB:
        prop.setProperty("bd.base", cfg.getBase());
        prop.setProperty("bd.nomebd", cfg.getNomeBd());
        prop.setProperty("bd.user", cfg.getUser());
        prop.setProperty("bd.password", cfg.getPassword());
        prop.setProperty("bd.local", cfg.getLocal());
        break;
    }
    prop.setProperty("xml.diretorio", cfg.getXmlDiretorio());
    prop.setProperty("bd.ip.mixdb", cfg.getIpMixdb());

    try {
//      Cria uma instância do arquivo properties
      File file = new File(this.getClass().getResource("cfg.properties").getFile());
//      Prepara o arquivo para ser manipulado e posteriormente salvo
      FileOutputStream fos = new FileOutputStream(file);
//      salva o arquivo properties
      prop.store(fos, null);
//      fecha o arquivo
      fos.close();
    } catch (IOException e) {
      Util.msgErro(e, "Erro na gravação das configurações.");
    }
  }
}
